package com.dc.web.admin;

import com.dc.po.Tag;
import com.dc.service.TagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
@RequestMapping("/admin")
public class TagController {

    @Autowired
    private TagService tagService;

    //标签列表页
    @GetMapping("/tags")
    public String tags(@PageableDefault(size = 6,sort = {"id"},direction = Sort.Direction.DESC)
                                   Pageable pageable, Model model){
        model.addAttribute("page",tagService.listTag(pageable));
        return "admin/tags";
    }

    //新增标签页
    @GetMapping("/tags/input")
    public String input(Model model){
        //因为新增编辑共用一个页面，防止页面报错
        model.addAttribute("tag",new Tag());
        return "admin/tags-input";
    }

    //前往编辑标签页
    @GetMapping("/tags/{id}/input")
    public String editInput(@PathVariable Long id,
                            Model model) {
        model.addAttribute("tag", tagService.getTag(id));
        return "admin/tags-input";
    }

    //新增或修改  分开比较好，判断有点深可能影响性能 以下为土八路写法
    @PostMapping("/tags")
    public String save(Tag tag,
                       RedirectAttributes attributes,
                       Model model){
        //规范性验证 name属性非空校验  推荐用注解校验，配合result.hasErrors()判断，不要自己写
        if(tag.getName()==null||tag.getName().length()==0){
            model.addAttribute("msg","名称不能为空");
            return "admin/tags-input";
        }

        //用来判断是不是修改 执行tagService.saveTag(tag) tag会被赋值 这是坑！
        Long id = tag.getId();
        //调用dao层执行保存操作
        Tag tag1 = tagService.saveTag(tag);

        //业务层已经执行业务性校验 结果null表示名称重复了 也可以使用result.rejectValue和result.hasErrors()
        if(tag1==null){
            model.addAttribute("msg","该名称已存在");
            return "admin/tags-input";
        }

        //判断是新增还是修改，进行信息提示
        if(id==null){
            attributes.addFlashAttribute("tagMsg","新增标签成功");
        }else {
            attributes.addFlashAttribute("tagMsg","修改标签成功");
        }

        return "redirect:/admin/tags";

    }

    //删除
    @GetMapping("/tags/{id}/delete")
    public String delete(@PathVariable Long id,
                         RedirectAttributes attributes){
        tagService.deleteTag(id);
        attributes.addFlashAttribute("tagMsg","删除标签成功");
        return "redirect:/admin/tags";
    }


}
